package coreBiz

type Xor struct {
	Key []byte
}

// XorObfuscate 使用xor进行混淆
func XorObfuscate(key string, original []byte) []byte {
	return new(Xor).getXorKey(key, len(original)).obfuscate(original)
}

func (xor *Xor) obfuscate(original []byte) []byte {
	obfuscated := make([]byte, len(original))
	keyLen := len(xor.Key)
	for i := 0; i < len(original); i++ {
		obfuscated[i] = original[i] ^ xor.Key[i%keyLen]
	}
	return obfuscated
}

// 获取xor的密码
func (xor *Xor) getXorKey(key string, strLen int) *Xor {
	keyLen := len(key)

	// 提前分配最终切片的容量，避免动态扩容
	xor.Key = make([]byte, strLen)

	// 填充密钥，使用 % 取模循环密钥内容
	for i := 0; i < strLen; i++ {
		xor.Key[i] = key[i%keyLen]
	}
	return xor
}
